/*
 * @lc app=leetcode.cn id=9 lang=typescript
 *
 * [9] 回文数
 */

// @lc code=start
function isPalindrome(x: number): boolean {
  /**
   * 首先，我们应该处理一些临界情况。所有负数都不可能是回文，
   * 例如：-123 不是回文，因为 - 不等于 3。所以我们可以对所有负数返回 false。
   * 除了 0 以外，所有个位是 0 的数字不可能是回文，
   * 因为最高位不等于 0。所以我们可以对所有大于 0 且个位是 0 的数字返回 false。
   *  */
  if (x < 0 || (x % 10 == 0 && x !== 0)) {
    return false;
  }
  /**
   * 对于数字 1221，如果执行 1221 % 10，我们将得到最后一位数字 1，
   * 要得到倒数第二位数字，我们可以先通过除以 10 把最后一位数字从 1221 中移除，
   * 1221 / 10 = 122，再求出上一步结果除以 10 的余数，122 % 10 = 2，
   * 就可以得到倒数第二位数字。如果我们把最后一位数字乘以 10，再加上倒数第二位数字，
   * 1 * 10 + 2 = 12，
   * 就得到了我们想要的反转后的数字。如果继续这个过程，我们将得到更多位数的反转数字。
   */
  let revertedNumber: number = 0;
  while (x > revertedNumber) {
    revertedNumber = revertedNumber * 10 + x % 10;
    x = ~~(x / 10);
  }

  return x===revertedNumber || x === ~~(revertedNumber/10)
}
// @lc code=end
